/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sk.uniba.fmph.asdf.db;

/**
 * Trieda sluzi k definovaniu konstantnych volani rutin na urovni MySQL
 * databazy.
 *
 * @author tim
 * @author ivor
 */
public enum SQLQuery {

	/**
	 * Vytvorenie noveho pouzivatela.
	 */
	CREATE_NEW_USER("create_new_user('%s', '%s', '%s', '%s')"),

	/**
	 * Zmazanie existujuceho pouzivatela.
	 */
	DELETE_USER("delete_user(%d)"),

	/**
	 * Zmena pouzivatelovych udajov.
	 */
	EDIT_USER_DETAILS("edit_user_details(%d, '%s', '%s', '%s')"),

	/**
	 * Zmena pouzivatelovho hesla.
	 */
	EDIT_USER_PASSWORD("edit_user_password(%d, '%s')"),

	/**
	 * Vrati pouzivatela s danym ID.
	 */
	GET_USER("get_user('%s')"),

	/**
	 * Vrati pouzivatela s danym prihlasovacim menom.
	 */
	GET_USER_BY_USERNAME("get_user_by_username('%s')"),

	/**
	 * Vrati vsetkych pouzivatelov.
	 */
	GET_USERS("get_users()"),

	/**
	 * Prihlasi pouzivatela.
	 */
	LOGIN_USER("login_user('%s', '%s')"),

	/**
	 * Vrati tabulku testov, ktore sa zmenili od poslednej synchronizacie a ku
	 * ktorym ma pouzivatel pristup.
	 */
	GET_MODIFIED_TESTS("get_modified_tests('%s', '%s')"),

	/**
	 * Vrati tabulku hodnoteni pre dany test, ku ktorym ma pouzivatel pristup.
	 */
	GET_EVALUATIONS("get_evaluations('%s', '%s')"),

	/**
	 * Vrati tabulku peciatok pre dany test, ku ktorym ma pouzivatel pristup.
	 */
	GET_STAMPS("get_stamps('%s', '%s')"),

	/**
	 * Vrati tabulku rozsireni oblasti pre dany test.
	 */
	GET_FIELD_EXTENSIONS("get_field_extensions('%s')"),

	/**
	 * Vrati tabulku so sablonou pre dany test.
	 */
	GET_TEMPLATE("get_template('%s')"),

	/**
	 * Vrati tabulku oblasti pre danu sablonu.
	 */
	GET_FIELDS("get_fields('%s')"),

	/**
	 * Vrati tabulku pouzivatelov, ktori su hodnotitelmi danej sablony.
	 */
	GET_EVALUATORS("get_evaluators('%s')"),

	/**
	 * Prida sablonu do databazy a vrati jej ID.
	 */
	ADD_TEMPLATE("add_template('%s', '%s')", true),

	/**
	 * Prida oblast k sablone do databazy.
	 */
	ADD_FIELD("add_field('%s', '%s', '%s', '%s', '%s', '%s')", true),

	/**
	 * Prida test do databazy a vrati jeho ID.
	 */
	ADD_TEST("add_test('%s', '%s', '%s', '%s')", true),

	/**
	 * Prida rozsirenie oblasti k testu do databazy a vrati jeho ID.
	 */
	ADD_FIELD_EXTENSION(
			"add_field_extension('%s', '%s', '%s', '%s', '%s', '%s')", true),

	/**
	 * Prida peciatku k testu do databazy.
	 */
	ADD_STAMP("add_stamp('%s', '%s', '%s', '%s', '%s', '%s', '%s')"),

	/**
	 * Obnovi udaje testu na strane databazy podla lokalnych zmien.
	 */
	UPDATE_TEST("update_test('%s', '%s')"),

	/**
	 * Vrati tabulku so zaznamom vykonanych cinnosti v databaze.
	 */
	GET_LOGS("get_logs()");

	private final static String CALL_KW = "CALL";
	private final static String SELECT_KW = "SELECT";

	/** Retazec reprezentujuci SQL kod. */
	private String query;

	/** Ci ide o SELECT dotaz alebo nie (ide o CALL) */
	private boolean isSelectStatement;

	SQLQuery(final String query) {
		this(query, false);

	}

	SQLQuery(final String query, final boolean isSelectStatement) {
		this.query = query;
		this.isSelectStatement = isSelectStatement;
	}

	/**
	 * Vrati volanie SQL kodu v retazci.
	 */
	@Override
	public String toString() {
		return ((!isSelectStatement) ? CALL_KW : SELECT_KW) + " " + query;
	}
}
